
# Create your views here.

from detalles_especie.models import DetalleEspecie
from detalles_region.forms import DetalleRegionForm
from detalles_region.models import DetalleRegion
from django.contrib.auth.decorators import login_required, user_passes_test
from django.core.context_processors import csrf
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render_to_response
from django.template import RequestContext
from django.views.generic.create_update import update_object, create_object, \
    delete_object
from django.views.generic.list_detail import object_list, object_detail
from usuarios.permisos import es_del_grupo_de_expertos


def listar(request,especie_id):    #seria la pagina de inicio para las especies
    especie = get_object_or_404(DetalleEspecie,pk=especie_id)
    return object_list(request,
                       queryset = DetalleRegion.objects.filter(especie=especie),
                       allow_empty = True,
                       template_name = 'detalles_region/listar.html'
                       )

@login_required 
def ver(request, especie_id,region_id):
    get_object_or_404(DetalleEspecie, pk=especie_id)
    get_object_or_404(DetalleRegion,pk = region_id)
    return object_detail(request,
                         queryset = DetalleRegion.objects.all(),
                         template_object_name =  "DetalleRegion",
                         template_name = 'detalles_region/detalle.html',
                         object_id = region_id
                         ) 
        
@login_required
@user_passes_test(es_del_grupo_de_expertos,login_url='/accounts/signin/no_experto')
def crear(request,especie_id):
    c={}
    especie = get_object_or_404(DetalleEspecie,pk=especie_id)
    if request.method == 'POST':                            
        form = DetalleRegionForm(request.POST)                                                
        if form.is_valid():                                  
            new_region = form.save(commit=False)
            new_region.especie = especie
            for coords in form.cleaned_data['coordenadas']:
                new_region.coordenadas.add(coords)
            new_region.save()           
            return HttpResponseRedirect('/especies/' + especie_id + '/regiones/')
    else:
        form = DetalleRegionForm()
        
    form.fields['coordenadas'].help_text = ''
    c.update({'user':request.user})  
    c.update({'especie':especie}) 
    c.update(csrf(request))
    c.update({'form':form})
    c.update()                     
    return render_to_response("detalles_region/crear.html", c,context_instance=RequestContext(request))    


@login_required
def crear_automatico(request,especie_id):
    especie = get_object_or_404(DetalleEspecie,pk=especie_id)
    return create_object(request,
                         model = DetalleRegion,
                         form_class = DetalleRegionForm, 
                         extra_context = {'especie' : especie },
                         template_name = 'detalles_region/crear.html', 
                         post_save_redirect = '/especies/' + especie_id + '/regiones/',
                         )

@login_required
def editar_automatico(request, especie_id, region_id):
    especie = get_object_or_404(DetalleEspecie, pk=especie_id)
    get_object_or_404(DetalleRegion, pk=region_id)
    return update_object(request,
                         model = DetalleRegion,
                         form_class = DetalleRegionForm, 
                         extra_context = {'especie' : especie},
                         template_name = 'detalles_region/editar.html', 
                         post_save_redirect = '/especies/' + especie_id + '/regiones/' + region_id,
                         object_id = region_id
                         )
    

@login_required
@user_passes_test(es_del_grupo_de_expertos,login_url='/accounts/signin/no_experto')
def editar(request, especie_id, region_id):
    especie = get_object_or_404(DetalleEspecie, pk=especie_id)
    region = get_object_or_404(DetalleRegion, pk=region_id)
    if request.method == 'POST':
        form = DetalleRegionForm(request.POST,instance = region)
        if form.is_valid():                                  
            new_region = form.save(commit=False)
            new_region.especie = especie
            new_region.save()
            return HttpResponseRedirect('/especies/' + especie_id + '/regiones/' + region_id)
    else:
        form = DetalleRegionForm(instance = region)
    form.fields['coordenadas'].help_text = '' 
    return update_object(request,
                         model = DetalleRegion,
                         extra_context = {'form' : form,'especie': especie}, 
                         template_name = 'detalles_region/editar.html', 
                         post_save_redirect = '/especies/' + especie_id + '/regiones/' + region_id,
                         object_id = region_id
                         )


@login_required
@user_passes_test(es_del_grupo_de_expertos,login_url='/accounts/signin/no_experto')
def eliminar(request, especie_id,region_id):
    get_object_or_404(DetalleRegion, pk=region_id)
    especie = get_object_or_404(DetalleEspecie, pk=especie_id)
    return delete_object(request,
                         model = DetalleRegion,
                         extra_context = {'especie':especie}, 
                         template_name = 'detalles_region/confirmar_eliminar.html', 
                         post_delete_redirect = '/especies/' + especie_id + '/regiones/',
                         object_id = region_id
                         )
